<?php
/**
 * Created by PhpStorm.
 * User: aron
 * Date: 2019/5/22
 * Time: 1:57 PM
 */

class ImageUtil
{
    /**
     * 图片沿X轴翻转，以jpeg格式为例
     * @param    string $filename 图片名称
     */
    public static function trun_x($filename)
    {
        /* 创建图片背景资源，以jpeg格式为例 */
        $back = imagecreatefromjpeg($filename);

        $width = imagesx($back);    //获取图片的宽度
        $height = imagesy($back);   //获取图片的高度

        /* 创建一个新的图片资源，用来保存沿X轴翻转后的图片 */
        $new = imagecreatetruecolor($width, $height);

        /* 沿x轴翻转就是将原图从上向下按一个像素高度向新资中逐个复制 */
        for ($y = 0; $y < $height; $y++) {
            /* 逐条复制图片本身宽度，1个像素高度的图片到新资源中 */
            imagecopy($new, $back, 0, $height - $y - 1, 0, $y, $width, 1);
        }

        /* 保存翻转后的图片资源 */
        imagejpeg($new, $filename);

        imagedestroy($back);        //销毁原背景图像资源
        imagedestroy($new);         //销毁新的图片资源
    }

    /**
     * 图片沿Y轴翻转，以jpeg格式为例
     * @param    string $filename 图片名称
     */
    public static function trun_y($filename)
    {
        /* 创建图片背景资源，以jpeg格式为例 */
        $back = imagecreatefromjpeg($filename);

        $width = imagesx($back);    //获取图片的宽度
        $height = imagesy($back);   //获取图片的高度

        /* 创建一个新的图片资源，用来保存沿Y轴翻转后的图片 */
        $new = imagecreatetruecolor($width, $height);
        /* 沿Y轴翻转就是将原图从右向左按一个像素宽度向新资中逐个复制 */
        for ($x = 0; $x < $width; $x++) {
            /* 逐条复制图片本身高度，1个像素宽度的图片到新资源中 */
            imagecopy($new, $back, $width - $x - 1, 0, $x, 0, 1, $height);
        }

        /* 保存翻转后的图片资源 */
        imagejpeg($new, $filename);

        imagedestroy($back);        //销毁原背景图像资源
        imagedestroy($new);         //销毁新的图片资源
    }

    /**
     * 用于对图片进行缩放
     * @param    string $filename 图片的URL
     * @width    int        $width        设置图片缩放的最大宽度
     * @height    int        $height        设置图片缩放的最大高度
     */
    public static function thumb($filename, $width = 200, $height = 200)
    {
        /* 获取原图像$filename的宽度$width_orig和高度$hteight_orig */
        list($width_orig, $height_orig) = getimagesize($filename);

        /* 根据参数$width和$height值，换算出等比例缩放的高度和宽度 */
        if ($width && ($width_orig < $height_orig)) {
            $width = ($height / $height_orig) * $width_orig;
        } else {
            $height = ($width / $width_orig) * $height_orig;
        }

        /* 将原图缩放到这个新创建的图片资源中 */
        $image_p = imagecreatetruecolor($width, $height);
        /* 获取原图的图像资源 */
        $image = imagecreatefromjpeg($filename);

        /*使用imagecopyresampled()函数进行缩放设置 */
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

        /* 将缩放后的图片$image_p保存， 100（最佳质量，文件最大) */
        imagejpeg($image_p, $filename, 100);

        imagedestroy($image_p);        //销毁图片资源$image_p
        imagedestroy($image);        //销毁图片资源$image
    }

    /**
     * 为背景图片添加图片水印（位置随机）,背景图片格式为jpeg, 水印图片格式为gif
     * @param    string $filename 需要添加水印的背景图片
     * @param    string $water 水印图片
     */
    public static function watermark($filename, $water)
    {
        /* 获取背景图片的宽度和高度 */
        list($b_w, $b_h) = getimagesize($filename);

        /* 获取水印图片的宽度和高度 */
        list($w_w, $w_h) = getimagesize($water);

        /* 在背景图片中放水印图片的随机起始位置 */
        $posX = rand(0, ($b_w - $w_w));
        $posY = rand(0, ($b_h - $w_h));

        $back = imagecreatefromjpeg($filename);                //创建背景图片的资源
        $water = imagecreatefromgif($water);                    //创建水印图片的资源

        /* 使用imagecopy()函数将水印图片复制到背景图片指定的位置中 */
        imagecopy($back, $water, $posX, $posY, 0, 0, $w_w, $w_h);

        /* 保存带有水印图片的背景图片 */
        imagejpeg($back, $filename);

        imagedestroy($back);                //销毁背京图片资源$back
        imagedestroy($water);               //销毁水印图片资源$water
    }

    /**
     * 用给定角度旋转图像，以jpeg图处格式为例
     * @param    string $filename 要旋转的图片名称
     * @param    int $degrees 指定旋转的角度
     */
    public static function rotate($filename, $degrees)
    {
        /* 创建图像资源，以jpeg格式为例 */
        $source = imagecreatefromjpeg($filename);
        /* 使用imagerotate()函数按指定的角度旋转 */
        $rotate = imagerotate($source, $degrees, 0);
        /* 将旋转后的图片保存 */
        imagejpeg($rotate, $filename);
    }
}